package com.appkubes.mall.restful.application.goods.sku.service.impl;

import com.appkubes.mall.core.entity.MallGoodsSpecificSku;
import com.appkubes.mall.core.service.impl.BaseMallGoodsSpecificSkuServiceImpl;
import com.appkubes.mall.restful.application.goods.sku.dao.GoodsSpecificSkuDao;
import com.appkubes.mall.restful.application.goods.sku.entity.vo.SkuStockVO;
import com.appkubes.mall.restful.application.goods.sku.service.GoodsSpecificSkuService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

@Service
public class GoodsSpecificSkuServiceImpl extends BaseMallGoodsSpecificSkuServiceImpl implements GoodsSpecificSkuService {

    @Resource
    GoodsSpecificSkuDao goodsSpecificSkuDao;

    @Override
    public GoodsSpecificSkuDao getDao() {
        return goodsSpecificSkuDao;
    }

    @Override
    public List<MallGoodsSpecificSku> getList(String goodsKey, String skuDims) {
        QueryWrapper<MallGoodsSpecificSku> query = new QueryWrapper<>();

        MallGoodsSpecificSku entity = new MallGoodsSpecificSku();
        entity.setGoodsKey(goodsKey);
        entity.setSkuDims(skuDims);

        query.setEntity(entity);
        query.orderByDesc("is_default");
        return this.getBaseMapper().selectList(query);
    }

    @Override
    public MallGoodsSpecificSku find(String goodsKey, String skuCode) {
        QueryWrapper<MallGoodsSpecificSku> query = new QueryWrapper<>();

        MallGoodsSpecificSku entity = new MallGoodsSpecificSku();
        entity.setGoodsKey(goodsKey);
        entity.setSkuCode(skuCode);

        query.setEntity(entity);

        List<MallGoodsSpecificSku> goodsSpecificSkuList = this.getBaseMapper().selectList(query);
        if (goodsSpecificSkuList.size() == 0) return null;
        return goodsSpecificSkuList.get(0);
    }

    @Override
    public boolean cutStock(SkuStockVO skuStockVO) {
        MallGoodsSpecificSku mallGoodsSpecificSku = this.find(skuStockVO.getGoodsKey(), skuStockVO.getSkuCode());
        if (mallGoodsSpecificSku == null) return false;
        if (mallGoodsSpecificSku.getSkuStock() < skuStockVO.getCutNum()) return false;
        mallGoodsSpecificSku.setSkuStock(mallGoodsSpecificSku.getSkuStock() - skuStockVO.getCutNum());
        return updateById(mallGoodsSpecificSku);
    }

    @Override
    public boolean resumeStock(SkuStockVO skuStockVO) {
        MallGoodsSpecificSku mallGoodsSpecificSku = this.find(skuStockVO.getGoodsKey(), skuStockVO.getSkuCode());
        if (mallGoodsSpecificSku == null) return false;
        if (mallGoodsSpecificSku.getSkuStock() < skuStockVO.getCutNum()) return false;
        mallGoodsSpecificSku.setSkuStock(mallGoodsSpecificSku.getSkuStock() + skuStockVO.getCutNum());
        return updateById(mallGoodsSpecificSku);
    }
}
